package _11_整理题目._1_链表指针._删除节点;

import org.junit.Test;
import util.ListNode;

/**
 * 输入一个链表，输出该链表中倒数第k个结点。
 * 如果该链表长度小于k，请返回空。
 * 
 * 快慢指针，先让快指针走 k 步，如果遇到 fast==null 说明链表长度小于k，返回空
 * while(fast!=null) 各走一步
 * 走完的时候，fast==null，slow 即为倒数第 k 个节点
 * 
 */
public class _04_链表中倒数第k个节点 {
    
    public ListNode FindKthToTail (ListNode pHead, int k) {
        ListNode fast = pHead;
        ListNode slow = pHead;
        while(k > 0) {
            if(fast == null) return null;
            fast = fast.next;
            k--;
        }
        while(fast!=null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
    
    @Test
    public void main() {
        Integer[] arrayHead = {1,2,3,4,5};
        ListNode head = ListNode.getListFromArray(arrayHead);
        ListNode.printList(head);
        System.out.println(FindKthToTail(head, 3).val);
    }
}
